Micron Document
🎖️GitЯра🎖️

Node / meshtastic / Meshtastic-Android / files / build-logic / convention / src / main / kotlin / AnalyticsConventionPlugin.kt

Displaying Raw • Download

build-logic/convention/src/main/kotlin/AnalyticsConventionPlugin.kt bd2863243bab6eb213401d949839a2bc74dde7e2 (bd286324) Text, 5.01 KB

T8b949e/*
* Copyright (c) 2026 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
Tff7b72import T7ee787com.android.build.api.dsl.ApplicationExtension
Tff7b72import T7ee787com.android.build.api.variant.ApplicationAndroidComponentsExtension
Tff7b72import T7ee787com.datadog.gradle.plugin.DdExtension
Tff7b72import T7ee787com.datadog.gradle.plugin.InjectBuildIdToAssetsTask
Tff7b72import T7ee787com.datadog.gradle.plugin.SdkCheckLevel
Tff7b72import T7ee787org.gradle.api.Plugin
Tff7b72import T7ee787org.gradle.api.Project
Tff7b72import T7ee787org.gradle.kotlin.dsl.apply
Tff7b72import T7ee787org.gradle.kotlin.dsl.configure
Tff7b72import T7ee787org.gradle.kotlin.dsl.findByType
Tff7b72import T7ee787org.gradle.kotlin.dsl.withType
Tff7b72import T7ee787org.meshtastic.buildlogic.libs
Tff7b72import T7ee787org.meshtastic.buildlogic.plugin
Tff7b72import T7ee787java.io.File

T8b949e/**
* Convention plugin for analytics (Google Services, Crashlytics, Datadog). Segregates these plugins to only affect the
* "google" flavor and disables their tasks for "fdroid".
*/
Tff7b72class T56d364AnalyticsConventionPlugin Tb4b4b4: Te6edf3PluginTff7b72<Te6edf3ProjectTff7b72> Tb4b4b4{
Tff7b72override Tff7b72fun Td2a8ffapplyTb4b4b4(Te6edf3targetTb4b4b4: Te6edf3ProjectTb4b4b4) Tb4b4b4{
Te6edf3withTb4b4b4(Te6edf3targetTb4b4b4) Tb4b4b4{
Te6edf3applyAnalyticsPluginsTb4b4b4(Tb4b4b4)
Te6edf3disableFdroidAnalyticsTasksTb4b4b4(Tb4b4b4)
Te6edf3configureDatadogVariantsTb4b4b4(Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Tff7b72private Tff7b72fun Te6edf3ProjectTb4b4b4.Td2a8ffapplyAnalyticsPluginsTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3extensionsTb4b4b4.Te6edf3configureTff7b72<Te6edf3ApplicationExtensionTff7b72> Tb4b4b4{
T8b949e// Deliberately eager `all {}` (not `configureEach`): this block APPLIES plugins as a side
T8b949e// effect of the google flavor being registered. `configureEach` defers until AGP realizes
T8b949e// the flavor objects, which can be too late for google-services/crashlytics to hook variants.
Te6edf3productFlavorsTb4b4b4.Te6edf3all Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3name Tff7b72=Tff7b72= Ta5d6ff"Ta5d6ffgoogleTa5d6ff"Tb4b4b4) Tb4b4b4{
Te6edf3applyTb4b4b4(Te6edf3plugin Tff7b72= Te6edf3libsTb4b4b4.Te6edf3pluginTb4b4b4(Ta5d6ff"Ta5d6ffgoogle-servicesTa5d6ff"Tb4b4b4)Tb4b4b4.Te6edf3getTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3pluginIdTb4b4b4)
Te6edf3applyTb4b4b4(Te6edf3plugin Tff7b72= Te6edf3libsTb4b4b4.Te6edf3pluginTb4b4b4(Ta5d6ff"Ta5d6fffirebase-crashlyticsTa5d6ff"Tb4b4b4)Tb4b4b4.Te6edf3getTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3pluginIdTb4b4b4)
Te6edf3applyTb4b4b4(Te6edf3plugin Tff7b72= Te6edf3libsTb4b4b4.Te6edf3pluginTb4b4b4(Ta5d6ff"Ta5d6ffdatadogTa5d6ff"Tb4b4b4)Tb4b4b4.Te6edf3getTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3pluginIdTb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Tff7b72private Tff7b72fun Te6edf3ProjectTb4b4b4.Td2a8ffdisableFdroidAnalyticsTasksTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3pluginsTb4b4b4.Te6edf3withIdTb4b4b4(Ta5d6ff"Ta5d6ffcom.google.gms.google-servicesTa5d6ff"Tb4b4b4) Tb4b4b4{
Te6edf3tasksTb4b4b4.Te6edf3configureEach Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3nameTb4b4b4.Te6edf3containsTb4b4b4(Ta5d6ff"Ta5d6ffGoogleServicesTa5d6ff"Tb4b4b4, Te6edf3ignoreCase Tff7b72= Tff7b72trueTb4b4b4) Tff7b72&Tff7b72& Te6edf3nameTb4b4b4.Te6edf3containsTb4b4b4(Ta5d6ff"Ta5d6fffdroidTa5d6ff"Tb4b4b4, Te6edf3ignoreCase Tff7b72= Tff7b72trueTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3enabled Tff7b72= Tff7b72false
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Te6edf3pluginsTb4b4b4.Te6edf3withIdTb4b4b4(Ta5d6ff"Ta5d6ffcom.google.firebase.crashlyticsTa5d6ff"Tb4b4b4) Tb4b4b4{
Te6edf3tasksTb4b4b4.Te6edf3configureEach Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3nameTb4b4b4.Te6edf3containsTb4b4b4(Ta5d6ff"Ta5d6ffCrashlyticsTa5d6ff"Tb4b4b4, Te6edf3ignoreCase Tff7b72= Tff7b72trueTb4b4b4) Tff7b72&Tff7b72& Te6edf3nameTb4b4b4.Te6edf3containsTb4b4b4(Ta5d6ff"Ta5d6fffdroidTa5d6ff"Tb4b4b4, Te6edf3ignoreCase Tff7b72= Tff7b72trueTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3enabled Tff7b72= Tff7b72false
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

T8b949e// Disable Datadog analytics/upload tasks for fdroid, but NOT the buildId
T8b949e// inject/generate tasks. The Datadog plugin wires InjectBuildIdToAssetsTask via
T8b949e// variant.artifacts.toTransform(SingleArtifact.ASSETS), which replaces the merged
T8b949e// assets artifact for the entire variant. Disabling that task leaves its output
T8b949e// directory empty, causing compressAssets to produce zero files and stripping ALL
T8b949e// assets (including Compose Multiplatform .cvr resources) from the release APK.
Te6edf3pluginsTb4b4b4.Te6edf3withIdTb4b4b4(Ta5d6ff"Ta5d6ffcom.datadoghq.dd-sdk-android-gradle-pluginTa5d6ff"Tb4b4b4) Tb4b4b4{
Te6edf3tasksTb4b4b4.Te6edf3configureEach Tb4b4b4{
Tff7b72if Tb4b4b4(
Tb4b4b4(Te6edf3nameTb4b4b4.Te6edf3containsTb4b4b4(Ta5d6ff"Ta5d6ffdatadogTa5d6ff"Tb4b4b4, Te6edf3ignoreCase Tff7b72= Tff7b72trueTb4b4b4) Tff7b72|Tff7b72| Te6edf3nameTb4b4b4.Te6edf3containsTb4b4b4(Ta5d6ff"Ta5d6ffuploadMappingTa5d6ff"Tb4b4b4, Te6edf3ignoreCase Tff7b72= Tff7b72trueTb4b4b4)Tb4b4b4) Tff7b72&Tff7b72&
Te6edf3nameTb4b4b4.Te6edf3containsTb4b4b4(Ta5d6ff"Ta5d6fffdroidTa5d6ff"Tb4b4b4, Te6edf3ignoreCase Tff7b72= Tff7b72trueTb4b4b4)
Tb4b4b4) Tb4b4b4{
Te6edf3enabled Tff7b72= Tff7b72false
Tb4b4b4}
Tb4b4b4}

T8b949e// The inject task must stay enabled to maintain the AGP artifact pipeline,
T8b949e// but we strip the datadog.buildId file from its output to preserve fdroid
T8b949e// sterility — no analytics artifacts should ship in the open-source flavor.
Te6edf3tasksTb4b4b4.Te6edf3withTypeTff7b72<Te6edf3InjectBuildIdToAssetsTaskTff7b72>Tb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3configureEach Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3nameTb4b4b4.Te6edf3containsTb4b4b4(Ta5d6ff"Ta5d6ffFdroidTa5d6ff"Tb4b4b4, Te6edf3ignoreCase Tff7b72= Tff7b72trueTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3doLast Tb4b4b4{
Tff7b72val Te6edf3buildIdFile Tff7b72= Te6edf3FileTb4b4b4(Te6edf3outputAssetsTb4b4b4.Te6edf3getTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3asFileTb4b4b4, Ta5d6ff"Ta5d6ffdatadog.buildIdTa5d6ff"Tb4b4b4)
Tff7b72if Tb4b4b4(Te6edf3buildIdFileTb4b4b4.Te6edf3existsTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3buildIdFileTb4b4b4.Te6edf3deleteTb4b4b4(Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Tff7b72private Tff7b72fun Te6edf3ProjectTb4b4b4.Td2a8ffconfigureDatadogVariantsTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3extensionsTb4b4b4.Te6edf3configureTff7b72<Te6edf3ApplicationAndroidComponentsExtensionTff7b72> Tb4b4b4{
Te6edf3onVariants Tb4b4b4{ Te6edf3variant Tff7b72-Tff7b72>
Tff7b72if Tb4b4b4(Te6edf3variantTb4b4b4.Te6edf3flavorName Tff7b72=Tff7b72= Ta5d6ff"Ta5d6ffgoogleTa5d6ff"Tb4b4b4) Tb4b4b4{
Te6edf3extensionsTb4b4b4.Te6edf3findByTypeTff7b72<Te6edf3DdExtensionTff7b72>Tb4b4b4(Tb4b4b4)Tff7b72?.Te6edf3apply Tb4b4b4{
Te6edf3variants Tb4b4b4{ Te6edf3registerTb4b4b4(Te6edf3variantTb4b4b4.Te6edf3nameTb4b4b4) Tb4b4b4{ Te6edf3site Tff7b72= Ta5d6ff"Ta5d6ffUS5Ta5d6ff" Tb4b4b4} Tb4b4b4}
Te6edf3checkProjectDependencies Tff7b72= Te6edf3SdkCheckLevelTb4b4b4.Te6edf3NONE
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Served by rngit 1.5.0 - Generated in 0.57s